home *** CD-ROM | disk | FTP | other *** search
/ PsL Monthly 1993 December / PSL Monthly Shareware CD-ROM (December 1993).iso / prgmming / dos / c / datelib.exe / DIFFDTIM.C < prev    next >
C/C++ Source or Header  |  1992-03-27  |  6KB  |  197 lines

  1. static char diffdtime_prog[] = "@(#)Zeitdifferenzen in Sekunden ermitteln";
  2. static char diffdtime_ver[]  = "@(#)v1.00/kr ; 09.06.91";
  3. /* Autor        Klaus Rath
  4. **
  5. ** Deklaration  long diffdtime(char *zeit1, char *zeit2);
  6. **
  7. ** Übergabe     Erwartet werden 2 Strings in folgenden optionalen Formaten:
  8. **              hh:mm[:ss]  -- Formate       TI_HM_D,TI_HMS_D
  9. **              hh.mm[.ss]  -- Formate       TI_HM_P,TI_HMS_P
  10. **              hhmm[ss]    -- DDB/4-Formate TI_HM_DB,TI_HMS_DB
  11. **              wobei der Trenner ':' oder '.' bestimmt, welches Formatpaar
  12. **              in Frage kommt - bzw. Datenbankformat, falls kein Trenner.
  13. **              Da die beiden Zeiten einzeln geprüft und konvertiert werden,
  14. **              dürfen unterschiedliche Formate verwendet werden!
  15. **
  16. ** Rückgabe     Zurückgegeben wird die Differenz in Sekunden als long-Wert.
  17. **              Da eine Differenz von 0 sec ja durchaus vorkommen kann, eignet
  18. **              sich die 0 nicht als Fehlerkennung. diffdtime gibt für diesen
  19. **              Fall die Zahl 90909090 zurück, deren normales Zustandekommen
  20. **              ziemlich unwahrscheinlich sein dürfte, zumal sich die Zeiten
  21. **              z.Zt. alle im Rahmen eines Tages abspielen.
  22. **
  23. ** Anmerkung
  24. **
  25. ** Änderungen   1.00 ; 09.06.91
  26. **              - Erste vollwertige Version
  27. */
  28.  
  29. #include <time.h>
  30. #include <string.h>
  31. #include <stdio.h>
  32. #ifdef __TURBOC__
  33. #define ANSI
  34. #define MSDOS
  35. #include <stdlib.h>
  36. #endif
  37. #include "datum.h"
  38.  
  39. #ifdef ANSI
  40. long diffdtime(char *zeit1, char *zeit2)
  41. #else
  42. long diffdtime(zeit1,zeit2)
  43. char *zeit1;
  44. char *zeit2;
  45. #endif
  46. {
  47.     long   sekunden_summe1,sekunden_summe2;
  48.     long   ergebnis;
  49.     char   h_s1[3],h_s2[3],m_s1[3],m_s2[3],s_s1[3],s_s2[3];
  50.     long   stunden1,stunden2,minuten1,minuten2,sekunden1,sekunden2;
  51.     int    laenge1,laenge2;
  52.  
  53.     /* Längenüberprüfung :
  54.     */
  55.     laenge1 = strlen(zeit1);
  56.     if ( laenge1 == 4 || laenge1 == 5 || laenge1 == 6 || laenge1 == 8 )
  57.         ;
  58.     else
  59.         return((long)FEHLER);
  60.  
  61.     laenge2 = strlen(zeit2);
  62.     if ( laenge2 == 4 || laenge2 == 5 || laenge2 == 6 || laenge2 == 8)
  63.         ;
  64.     else
  65.         return((long)FEHLER);
  66.  
  67.     /* Format überprüfen und umkopieren :
  68.     */
  69.     /* 1. Zeit :
  70.     */
  71.     if ( ( zeit1[2] == ':' || zeit1[2] == '.' ) &&
  72.          ( laenge1  == 5   || laenge1  == 8   )    ) {
  73.         h_s1[0]      = zeit1[0];
  74.         h_s1[1]      = zeit1[1];
  75.         h_s1[2]      = '\0';
  76.         m_s1[0]      = zeit1[3];
  77.         m_s1[1]      = zeit1[4];
  78.         m_s1[2]      = '\0';
  79.         if ( laenge1 == 8 ) {
  80.             s_s1[0]  = zeit1[6];
  81.             s_s1[1]  = zeit1[7];
  82.             s_s1[2]  = '\0';
  83.         }
  84.         else if ( laenge1 == 5 ) {
  85.             s_s1[0]  = '0';
  86.             s_s1[1]  = '0';
  87.             s_s1[2]  = '\0';
  88.         }
  89.         else
  90.             return((long)FEHLER);
  91.     } /* ENDE: Doppelpunkt- und Punkt-Formate */
  92.  
  93.     else if ( laenge1 == 4 || laenge1 == 6 ) {          /* Datenbankformate */
  94.         h_s1[0]   = zeit1[0];
  95.         h_s1[1]   = zeit1[1];
  96.         h_s1[2]   = '\0';
  97.         m_s1[0]   = zeit1[2];
  98.         m_s1[1]   = zeit1[3];
  99.         m_s1[2]   = '\0';
  100.         if ( laenge1 == 6 ) {
  101.             s_s1[0]   = zeit1[4];
  102.             s_s1[1]   = zeit1[5];
  103.             s_s1[2]   = '\0';
  104.         }
  105.         else if ( laenge1 == 4 ) {
  106.             s_s1[0]   = '0';
  107.             s_s1[1]   = '0';
  108.             s_s1[2]   = '\0';
  109.         }
  110.         else
  111.             return((long)FEHLER);
  112.     } /* ENDE: Datenbankformate */
  113.     else
  114.         return((long)FEHLER);
  115.     /* ENDE:if(Formatprüfung und Kopierung für 1.Datum) */
  116.  
  117.     /* 2. Zeit :
  118.     */
  119.     if ( ( zeit2[2] == ':' || zeit2[2] == '.' ) &&
  120.          ( laenge2  == 5   || laenge2  == 8   )    ) {
  121.         h_s2[0]      = zeit2[0];
  122.         h_s2[1]      = zeit2[1];
  123.         h_s2[2]      = '\0';
  124.         m_s2[0]      = zeit2[3];
  125.         m_s2[1]      = zeit2[4];
  126.         m_s2[2]      = '\0';
  127.         if ( laenge1 == 8 ) {
  128.             s_s2[0]  = zeit2[6];
  129.             s_s2[1]  = zeit2[7];
  130.             s_s2[2]  = '\0';
  131.         }
  132.         else if ( laenge1 == 5 ) {
  133.             s_s2[0]  = '0';
  134.             s_s2[1]  = '0';
  135.             s_s2[2]  = '\0';
  136.         }
  137.         else
  138.             return((long)FEHLER);
  139.     } /* ENDE: Doppelpunkt- und Punkt-Formate */
  140.  
  141.     else if ( laenge2 == 4 || laenge2 == 6 ) {          /* Datenbankformate */
  142.         h_s1[0]   = zeit2[0];
  143.         h_s2[1]   = zeit2[1];
  144.         h_s2[2]   = '\0';
  145.         m_s2[0]   = zeit2[2];
  146.         m_s2[1]   = zeit2[3];
  147.         m_s2[2]   = '\0';
  148.         if ( laenge1 == 6 ) {
  149.             s_s2[0]   = zeit2[4];
  150.             s_s2[1]   = zeit2[5];
  151.             s_s2[2]   = '\0';
  152.         }
  153.         else if ( laenge1 == 4 ) {
  154.             s_s2[0]   = '0';
  155.             s_s2[1]   = '0';
  156.             s_s2[2]   = '\0';
  157.         }
  158.         else
  159.             return((long)FEHLER);
  160.     } /* ENDE: Datenbankformat */
  161.     else
  162.         return((long)FEHLER);
  163.     /* ENDE:if(Formatprüfung und Kopierung für 2.Datum) */
  164.  
  165.     /* Konvertierung :
  166.     */
  167.     stunden1  = atol(h_s1);
  168.     minuten1  = atol(m_s1);
  169.     sekunden1 = atol(s_s1);
  170.  
  171.     stunden2  = atol(h_s2);
  172.     minuten2  = atol(m_s2);
  173.     sekunden2 = atol(s_s2);
  174.  
  175.     if ( minuten1  > 59L || minuten1  < 0L || stunden1 > 23L ||stunden1 < 0L ||
  176.          sekunden1 > 59L || sekunden1 < 0L ||
  177.          minuten2  > 59L || minuten2  < 0L || stunden2 > 23L ||stunden2 < 0L ||
  178.          sekunden2 > 59L || sekunden2 < 0L
  179.        )
  180.        return((long)FEHLER);
  181.  
  182.     sekunden_summe1 = 0L;
  183.     sekunden_summe2 = 0L;
  184.  
  185.     /* Stunden, Minuten und Sekunden aufaddieren :
  186.     */
  187.     sekunden_summe1 = (long)((stunden1*3600L) + (minuten1*60L) + sekunden1);
  188.     sekunden_summe2 = (long)((stunden2*3600L) + (minuten2*60L) + sekunden2);
  189.  
  190.     /* Gesamtergebnis :
  191.     */
  192.     ergebnis = sekunden_summe2 -sekunden_summe1;
  193.  
  194.     return(ergebnis);
  195.  
  196. } /* ENDE: diffdtime() */
  197.